iT邦幫忙

0

使用visual studio檢查memory leak

  • 分享至 

  • xImage
  •  
  1. visual studio mode 設定debug mode
  2. 開啟診斷工具
    偵錯->視窗->開啟診斷工具

若有請你enable診斷工具就點擊enable

標籤選擇記憶體使用量

  1. 在程式的開始以及結尾設定斷點

  2. F5執行第一次斷在第一行,並點擊擷取快照

  3. F5執行第二次以後再點擊擷取快照

  4. 點擊第二次快照上升箭頭旁邊的數字

    這個上升的數字跟箭頭不管有沒有leak都會顯示出來,還沒有認真去研究這是代表什麼意義

  5. 查看memory leak的buffer

    報告會顯示有memory leak的型態以及大小,CL的buffer也可以檢測出來。若沒有leak就不會顯示。

若要尋找memory leak就把code慢慢關掉,重複以上步驟看他還存不存在了。

注意C++的STL

由於以上方法是使用第一個斷點以及第一個斷點在heap memory裡面的difference作為判斷上升的依據,
因此在檢查leak時我們必須注意如C++的STL是否跳出生命週期而釋放記憶體
如同以下範例

std::string s; 在自己的建構函式會去配置記憶體,
而在main結束後才會跳出生命週期,
呼叫解構函式。
因此如果你是如上圖的code這樣測試,就會顯示尚有記憶體未釋放。

因此我們只要把code改成如下

#include <iostream>
using namespace std;

void test()
{
	std::string s;
}
int main()
{
	printf("start\n");
	test();
	printf("end");
	return 0;
}

將你的main code再用一個函式包裝起來,斷點設在printf("start\n");以及printf("end");
就可以順利的檢查memory leak而不會顯示這些C++的STL了

reference : https://stackoverflow.com/questions/4790564/finding-memory-leaks-in-a-c-application-with-visual-studio


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言